package cn.yanjr.common.utils;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;


/**
 * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
 * 
 * @author Ryan
 */
public class StringUtils extends org.apache.commons.lang3.StringUtils {
	
	public static String lowerFirst(String str){
		if(StringUtils.isBlank(str)) {
			return "";
		} else {
			return str.substring(0,1).toLowerCase() + str.substring(1);
		}
	}
	
	public static String upperFirst(String str){
		if(StringUtils.isBlank(str)) {
			return "";
		} else {
			return str.substring(0,1).toUpperCase() + str.substring(1);
		}
	}

	/**
	 * 替换掉HTML标签方法
	 */
	public static String replaceHtml(String html) {
		if (isBlank(html)){
			return "";
		}
		String regEx = "<.+?>";
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(html);
		String s = m.replaceAll("");
		return s;
	}

	/**
	 * 缩略字符串（不区分中英文字符）
	 * @param str 目标字符串
	 * @param length 截取长度
	 * @return
	 */
	public static String abbr(String str, int length) {
		if (str == null) {
			return "";
		}
//		try {
//			StringBuilder sb = new StringBuilder();
//			int currentLength = 0;
//			for (char c : replaceHtml(StringEscapeUtils.unescapeHtml4(str)).toCharArray()) {
//				currentLength += String.valueOf(c).getBytes("GBK").length;
//				if (currentLength <= length - 3) {
//					sb.append(c);
//				} else {
//					sb.append("...");
//					break;
//				}
//			}
//			return sb.toString();
//		} catch (UnsupportedEncodingException e) {
//			e.printStackTrace();
//		}
		return "";
	}

	/**
	 * 缩略字符串（替换html）
	 * @param str 目标字符串
	 * @param length 截取长度
	 * @return
	 */
	public static String rabbr(String str, int length) {
        return abbr(replaceHtml(str), length);
	}
		
	
	/**
	 * 转换为Double类型
	 */
	public static Double toDouble(Object val){
		if (val == null){
			return 0D;
		}
		try {
			return Double.valueOf(trim(val.toString()));
		} catch (Exception e) {
			return 0D;
		}
	}

	/**
	 * 转换为Float类型
	 */
	public static Float toFloat(Object val){
		return toDouble(val).floatValue();
	}

	/**
	 * 转换为Long类型
	 */
	public static Long toLong(Object val){
		return toDouble(val).longValue();
	}

	/**
	 * 转换为Integer类型
	 */
	public static Integer toInteger(Object val){
		return toLong(val).intValue();
	}
	
	/**
	 * 获得i18n字符串
	 */
//	public static String getMessage(String code, Object[] args) {
//		LocaleResolver localLocaleResolver = SpringContextHolder.getBean(LocaleResolver.class);
//		HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
//		Locale localLocale = localLocaleResolver.resolveLocale(request);
//		return SpringContextHolder.getApplicationContext().getMessage(code, args, localLocale);
//	}
	
	/**
	 * 获得用户远程地址
	 */
	public static String getRemoteAddr(HttpServletRequest request){
		String remoteAddr = request.getHeader("X-Real-IP");
        if (isNotBlank(remoteAddr)) {
        	remoteAddr = request.getHeader("X-Forwarded-For");
        }else if (isNotBlank(remoteAddr)) {
        	remoteAddr = request.getHeader("Proxy-Client-IP");
        }else if (isNotBlank(remoteAddr)) {
        	remoteAddr = request.getHeader("WL-Proxy-Client-IP");
        }
        return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
	}
	
	/**
	 * 获取当前服务器IP地址
	 * @return
	 * @throws IOException
	 */
	public static String getMyIPLocal(){  
		String ip = "";
        try {
			InetAddress ia = InetAddress.getLocalHost();  
			ip = ia.getHostAddress();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
        
        return ip;
    }
	
	/**
	 * 获取随机数
	 * @param n
	 * @return String
	 */
	public static String getRandom(int n) {
		int num = (int)((Math.random()*9+1) * (int)Math.pow(10, n - 1));
		return num + "" ;
	}
	
	/**
	 * 对象转日期字符串
	 */
	public static String convertObjectToDateString(Object o, String format) {
		String s = "";
		if (o != null) {
			if(isEmpty(format)) {
				format = "yyyy-MM-dd HH:mm:ss";
			}
			SimpleDateFormat dateFormat = new SimpleDateFormat(format);
			s = dateFormat.format(o);
		}
		return s;
	}
	/**
	 * 对象转日期字符串
	 */
	public static String convertObjectToDateString(Object o) {
		return convertObjectToDateString(o, null);
	}
	/**
	 * 对象转字符串
	 */
	public static String convertObjectToString(Object o) {
		String s = "";
		if (o != null && o.toString().length() > 0) {
			s = o.toString().trim();
		}
		return s;
	}

	/**
	 * 对象转int
	 */
	public static int convertObjectToInt(Object o) {
		int s = -1;
		if (o != null && o.toString().length() > 0) {
			s = Integer.parseInt(o.toString().trim());
		}
		return s;
	}
	/**
	 * 对象转int
	 */
	public static int convertObjectToInt(Object o, int d) {
		int s = d;
		if (o != null && o.toString().length() > 0) {
			s = Integer.parseInt(o.toString().trim());
		}
		return s;
	}
	
	/**
	 * 对象转double
	 */
	public static double convertObjectToDouble(Object o) {
		double s = 0.0;
		if (o != null && o.toString().length() > 0) {
			s = Double.parseDouble(o.toString().trim());
		}
		return s;
	}
	
	
	public static void main(String[] args) {
		System.out.println(StringUtils.getRandom(3));
	}
}

